package com.spgf.controller;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import com.archtecture.model.exceptions.NegocioException;
import com.archtecture.model.patterns.PadraoActivityCad;
import com.archtecture.model.patterns.PadraoRNAb;
import com.buzzingandroid.ui.HSVColorPickerDialog;
import com.buzzingandroid.ui.HSVColorPickerDialog.OnColorSelectedListener;
import com.spgf.model.entities.CategoriaModel;
import com.spgf.model.enums.TipoCategoria;
import com.spgf.model.rn.CategoriaRN;
import com.spgf.model.utils.AndroidUtil;

public class CategoriaCadActivity extends PadraoActivityCad {

	private ArrayAdapter<CategoriaModel>	adapter;
	private Button							btnSalvar;
	private Button							btnSelecionarCor;
	private Integer							corSelecionada;
	private EditText						edtNome;
	private EditText						edtSigla;

	private RadioGroup						rdgTipo;

	private Spinner							spnCategoria;

	private void configurarCamposHabilitados() {

		CategoriaModel lCategoria = (CategoriaModel) spnCategoria.getSelectedItem();

		if (lCategoria.getCodigo() == null) {
			btnSelecionarCor.setEnabled(true);
			edtSigla.setEnabled(true);
			rdgTipo.setEnabled(true);
		}

		else {
			btnSelecionarCor.setEnabled(false);
			edtSigla.setEnabled(false);
			rdgTipo.setEnabled(false);

			btnSelecionarCor.setBackgroundColor(lCategoria.getCor());
			corSelecionada = lCategoria.getCor();
			edtSigla.setText(lCategoria.getSigla());
		}

	}

	@Override
	protected void configurarEditar(Integer pCodigo) throws NegocioException {

		CategoriaModel lModel = new CategoriaRN(this).obterPorCodigo(new CategoriaModel(pCodigo));

		edtNome.setText(lModel.getNome());
		edtSigla.setText(lModel.getSigla());
		corSelecionada = lModel.getCor();
		btnSelecionarCor.setBackgroundColor(lModel.getCor());

		if (TipoCategoria.CREDITO.equals(lModel.getTipo())) {
			rdgTipo.check(R.id.rdo_categoria_cad_credito);
		} else {
			rdgTipo.check(R.id.rdo_categoria_cad_debito);
		}

		if (lModel.getCategoriaSuperior() != null && lModel.getCategoriaSuperior().getCodigo() != null
				&& lModel.getCategoriaSuperior().getCodigo() != 0) {
			CategoriaModel lCategoriaSuperior = new CategoriaRN(this).obterPorCodigo(lModel.getCategoriaSuperior());
			spnCategoria.setSelection(adapter.getPosition(lCategoriaSuperior));
		}
	}

	@SuppressWarnings({"unchecked", "rawtypes"})
	@Override
	protected void construirTela(Bundle savedInstanceState) throws NegocioException {
		super.construirTela(savedInstanceState);

		setContentView(R.layout.activity_categoria_cad);

		edtNome = (EditText) findViewById(R.id.edt_categoria_cad_nome);

		spnCategoria = (Spinner) findViewById(R.id.spn_categoria_cad_principal);
		adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, new CategoriaRN(this)
				.popularCombo(new CategoriaModel(), true));
		spnCategoria.setAdapter(adapter);
		spnCategoria.setOnItemSelectedListener(this);

		btnSelecionarCor = (Button) findViewById(R.id.btn_categoria_cad_color_piker);
		btnSelecionarCor.setOnClickListener(this);

		edtSigla = (EditText) findViewById(R.id.edt_categoria_cad_sigla);

		rdgTipo = (RadioGroup) findViewById(R.id.rdg_categoria_cad_tipo);

		btnSalvar = (Button) findViewById(R.id.btn_categoria_cad_salvar);
		btnSalvar.setOnClickListener(this);
	}

	@Override
	protected void executarClick(View pView) throws NegocioException {

		if (pView.getId() == R.id.btn_categoria_cad_salvar) {

			CategoriaModel lModel = obterModel();

			Integer lCodigo = getIntent().getIntExtra("CODIGO", 0);
			if (lCodigo != null && lCodigo != 0) {
				lModel.setCodigo(lCodigo);
				new CategoriaRN(this).editar(lModel);
				Toast.makeText(pView.getContext(), "Categoria atualizada com sucesso!", Toast.LENGTH_LONG).show();
			} else {
				new CategoriaRN(this).inserir(obterModel());
				Toast.makeText(pView.getContext(), "Categoria registrada com sucesso!", Toast.LENGTH_LONG).show();
			}
		}

		else if (pView.getId() == R.id.btn_categoria_cad_color_piker) {

			HSVColorPickerDialog cpd = new HSVColorPickerDialog(this, 0xFF4488CC, new OnColorSelectedListener() {

				@Override
				public void colorSelected(Integer color) {
					btnSelecionarCor.setBackgroundColor(color);
					corSelecionada = color;
				}
			});

			cpd.show();
		}
	}

	@Override
	protected void executarSelecao(AdapterView<?> pParent, View pView, int pPosition, long pID) throws NegocioException {
		super.executarSelecao(pParent, pView, pPosition, pID);

		if (pParent.getId() == R.id.spn_categoria_cad_principal) {
			configurarCamposHabilitados();
		}

	}

	@Override
	protected Class<?> getControleManutencao() {
		return CategoriaMntActivity.class;
	}

	@Override
	protected PadraoRNAb<CategoriaModel> getRN() {
		return new CategoriaRN(this);
	}

	private CategoriaModel obterModel() throws NegocioException {

		AndroidUtil.validarObjetosNulos(edtNome.getText().toString(), getString(R.string.categoria_cad_categoria_nome));
		AndroidUtil.validarObjetosNulos(corSelecionada, getString(R.string.categoria_cad_cor));
		AndroidUtil.validarObjetosNulos(edtSigla.getText().toString(), getString(R.string.categoria_cad_sigla));

		TipoCategoria lTipo = R.id.rdo_categoria_cad_credito == rdgTipo.getCheckedRadioButtonId() ? TipoCategoria.CREDITO : TipoCategoria.DEBITO;

		CategoriaModel lModel = new CategoriaModel();
		lModel.setNome(edtNome.getText().toString());
		lModel.setCategoriaSuperior((CategoriaModel) spnCategoria.getSelectedItem());
		lModel.setSigla(edtSigla.getText().toString());
		lModel.setTipo(lTipo);
		lModel.setCor(corSelecionada);

		return lModel;
	}
}
